package ui;

import java.awt.Graphics;

import dto.AmDto;

/**
 * 各种分块的父类
 * 当大量分块需要使用到相同的函数的时候也可以放在这个抽象类中
 * 
 * @author raymondwong
 *
 */
public abstract class Layer {
  
  /**
   * 分块左上角的x坐标
   */
  protected int x;
  
  /**
   * 分块左上角的y坐标
   */
  protected int y;
  
  /**
   * 分块宽度
   */
  protected int w;
  
  /**
   * 分块高度
   */
  protected int h;
  
  /**
   * 数据传输元
   */
  protected AmDto amDto = null;
  
  /**
   * 默认构造函数
   */
  protected Layer() {}
  
  /**
   * 根据参数设置分块的坐标以及长度宽度
   * 
   * @param x 左上角x轴坐标
   * @param y 左上角y轴坐标
   * @param w 宽度
   * @param h 高度
   */
  protected Layer(int x, int y, int w, int h) {
    this.x = x;
    this.y = y;
    this.w = w;
    this.h = h;
  }
  
  public int getX() {
    return x;
  }

  public void setX(int x) {
    this.x = x;
  }

  public int getY() {
    return y;
  }

  public void setY(int y) {
    this.y = y;
  }

  public int getW() {
    return w;
  }

  public void setW(int w) {
    this.w = w;
  }

  public int getH() {
    return h;
  }

  public void setH(int h) {
    this.h = h;
  }

  /**
   * 设置数据传输元
   * @param dto
   */
  public void setDto(AmDto dto) {
    this.amDto = dto;
    }
  
  /**
   * 绘制分块
   * 所有分块共有的动作就是绘制一块自己的区域
   * 可以利用这个函数来绘制不同layer的边框
   *
   * @author raymondwong
   */
  protected abstract void createWindow(Graphics g);
  
  /**
   * 刷新分块内容
   * 每个分块的子类都要重载这个paint函数,panel刷新的时候调用每个分块子类的paint函数即可刷新
   * 分块中的内容
   * 
   * @author raymondwong
   * @param g 画笔
   */
  abstract public void paint(Graphics g);
  
  
  
}
